// 包含标准输入输出库，用于printf函数
#include<stdio.h>

// 定义顺序表的最大容量为10个元素
#define MaxSize 10

// 定义顺序表的结构体类型
typedef struct {
    int Data[MaxSize];  // 数据数组，用来存储顺序表中的元素
    int length;         // 当前顺序表的实际长度（已存储元素的个数）
} SqlList;

// 初始化顺序表函数
// 参数：SqlList *L 表示指向顺序表的指针（地址）
void InitList(SqlList *L) {
    // 用for循环将数组中的所有位置初始化为0
    for (int i = 0; i < MaxSize; ++i) {
        L->Data[i] = 0;    // L->Data[i] 表示通过指针访问结构体中的Data数组
    }
    L->length = 0;         // 初始化长度为0，表示顺序表为空
}

// 打印顺序表函数
// 参数：SqlList *L 表示指向顺序表的指针（地址）
void printList(SqlList *L) {
    // 只打印已存储的元素（从0到length-1）
    for (int i = 0; i < L->length; ++i) {
        printf("当前数据Data[%d]：%d\n", i, L->Data[i]);
        // printf第一个参数是格式字符串：%d表示整数，%d表示第i个位置，第二个%d表示该位置的值
    }
    printf("当前长度：%d\n", L->length);  // 打印顺序表的当前长度
}

// 主函数 - 程序的入口点
int main() {
    SqlList L;        // 声明一个顺序表变量L
    
    InitList(&L);     // 调用初始化函数，&L表示传递L的地址（指针）
    
    printList(&L);    // 调用打印函数，&L表示传递L的地址（指针）
    
    return 0;         // 程序正常结束，返回0
}

/*
知识点总结：
1. 结构体(struct)：用来组合不同类型的数据
2. 指针(*)：存储变量地址的变量，用->访问指针指向的结构体成员
3. 地址运算符(&)：获取变量的内存地址
4. 顺序表：数据在内存中连续存储的线性数据结构
5. 函数参数传递：传递指针可以在函数内修改原变量的值
*/
